package cn.edu.nwpu.warehousemanagement.util;


import at.favre.lib.crypto.bcrypt.BCrypt;


/**
 * Bcrypt加密工具类
 *
 * @author Loadstar
 * @version 1.0
 */
public class BcryptUtil {

    // bcrypt 计算复杂度
    private static final int BCRYPT_COST = 12;

    /**
     * 对密码进行 bcrypt 哈希（含随机盐）
     *
     * @param password 明文密码（非空）
     * @return 包含盐值的哈希字符串（格式：$2a$[cost]$[salt][hash]）
     */
    public static String hashPassword(String password) {
        return BCrypt.withDefaults().hashToString(BCRYPT_COST, password.toCharArray());
    }

    /**
     * 验证明文密码与 bcrypt 哈希是否匹配
     *
     * @param password       明文密码（非空）
     * @param hashedPassword bcrypt 哈希字符串（含盐值）
     * @return true: 匹配；false: 不匹配
     */
    public static boolean verifyPassword(String password, String hashedPassword) {
        BCrypt.Result result = BCrypt.verifyer().verify(password.toCharArray(), hashedPassword);
        return result.verified;
    }
}
